27. 移除元素
27. 移除元素
Similar Question
leading to the advanced question
Solution Tips
方案一: 头尾指针
因为题目要求使用原地算法, 把剩余的值都放到头部, 所以很自然的就想到了头尾指针, 头指针一直指向可以存放元素的位置, 尾指针就指向存放废弃元素的位置, 最后返回头指针之前的元素即可
var removeElement = function(nums, val) {
let left = 0, right = nums.length;
while (left < right) {
if (nums[left] === val) {
nums[left] = nums[right - 1];
right--;
} else {
left++;
}
}
return left;
};
方案二: 快慢指针
参考 26 题的思路, 慢指针永远指向可替换的元素位置, 快指针则快速的去寻找需要替换的元素
var removeElement = function(nums, val) {
let slow = 0;
let fast = 0;
while (slow < nums.length && fast < nums.length) {
// 需要替换的元素是 != val 的元素
if (nums[fast] !== val) {
nums[slow] = nums[fast]
slow++
}
fast++
}
return slow;
};
console.log(removeElement([0,1,2,2,3,0,4,2], 2));